<html>
<body>
    <p style="font-size: 20px">
        持久化：将数据长久保存的操作来叫持久化，例如将数据保存到数据库，保存到txt文件等等<br>
        持久层技术解决方案：1、JDBC技术<br>
        2、Spring的JdbcTemplate–>Spring中对Jdbc的简单封装<br>
        3、Apache的DBUtils–>它和Spring的JdbcTemplate很像，也是对Jdbc的简单封装<br>
        ps：以上这些都不是框架(JDBC是规范、Spring的JdbcTemplate和Apache的DBUtils都只是工具类)<br>
        mybatis持久层框架：mybatis是一个用Java编写的持久层框架，它使用ORM实现了结果集的封装，跟hibernate一样，也是需要拥有两个配置文件，全局配置文件mybatis-config.xml 和 映射文件userMapping.xml<br>
        ORM是Object Relational Mapping 对象关系映射。简单来说，就是把数据库表和实体类及实体类的属性对应起来，让开发者操作实体类就实现操作数据库表<br>
        <br><br><br>
        一级缓存（默认开启）：<br>
        一级缓存作用域是sqlsession级别的，同一个sqlsession中执行相同的sql查询（相同的sql和参数），第一次会去查询数据库并写到缓存中，第二次从一级缓存中取。<br>
        如果中间sqlSession去执行commit操作（执行插入、更新、删除），则会清空SqlSession中的一级缓存，这样做的目的为了让缓存中存储的是最新的信息，避免脏读。<br>
        一级缓存无过期时间，只有生命周期<br><br>
        二级缓存：<br>
        它指的是Mybatis中SqlSessionFactory对象的缓存。由同一个SqlSessionFactory对象创建的SqlSession共享其缓存。<br>
        二级缓存是 mapper 映射级别的缓存，多个 SqlSession 去操作同一个 Mapper 映射的 sql 语句，多个SqlSession 可以共用二级缓存，二级缓存是跨 SqlSession 的。<br>
        在关闭sqlsession后(close)，才会把该sqlsession一级缓存中的数据添加到namespace的二级缓存中。<br>
        开启了二级缓存后，还需要将要缓存的pojo实现Serializable接口，为了将缓存数据取出执行反序列化操作，因为二级缓存数据存储介质多种多样，不一定只存在内存中，有可能存在硬盘中。<br>
        二级缓存有过期时间，每当存取数据的时候，都有检测一下cache的生命时间，默认是1小时，如果这个cache存活了一个小时，那么将整个清空一下。<br>
        <br>
        当 Mybatis 调用 Dao 层查询数据库时，先查询二级缓存，二级缓存中无对应数据，再去查询一级缓存，一级缓存中也没有，最后去数据库查找。<br>
    </p>
</body>
</html>
